package org.shock.ss.sms.commons.excel.impt;

import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;


public interface BaseExcelImport {
	
	
	
	/**到导入信息相关联的外键信息查询的sql语句
	 * 
	 * @return map
	 * 		   传入一个map。key为自定义字符串，value 为sql语句。
     *         sql语句有两个查询项，第一个为查询的外键名称，第二个为外键
     *         例 sql="select classname,classid from class"
	 * 
	 * */
	public Map<String,String> getRelationshipSqlMap() throws Exception;
	
	/**到导入信息相关联的外键信息
	 * @param  map
     *         传入一个map。key为自定义字符串，value 为sql语句。
     *         sql语句有两个查询项，第一个为查询的外键名称，第二个为外键
     *         例 sql="select classname,classid from class"
	 * @return 返回一个map每个map里面
	 * 		   的key 对应 传入map的key
	 * 		   value 对应 sql查询的出的子map
	 * 		   子map的key为外键的名称，value为外键
	 * 
	 * */
	public Map<String,Map> getRelationshipMaps(Map<String,String> map) throws Exception;
	
	/**判断文件是否为excel文件
	 * @param fileContentType
	 * 		  得到文件的类型。 由struts2自动判断
	 * 		  当返回的文件名为flie时fileContentType可得到文件的类型
	 * @return 是excel文件并为未打开状态返回true，
	 * 		   非excel文件或该excel文件正被打开返回false
	 * 
	 * */
	public boolean fileIsExcel(String fileContentType) throws Exception;
	
	/**得到判断文件是否为excel文件的描述
	 * @param 
	 * @return 是否为excel文件的描述
	 * */
	public String getFileIsExcelDescription();
	
	
	/**通过文件路径将excel中的数据封装成为一个List类型
	 * @param filepath
	 * 			文件上传到服务器后的路径
	 * @return 将excel数据按从上倒下，从左到右的顺序封装成一个二维链表
	 * */
	public List<List> readExcelToList (String filepath)throws Exception;
	
		
	/** 验证excel数据有效性
	 * @param list
	 *        将excel数据按从上倒下，从左到右的顺序封装的一个二维链表
	 * @return 验证通过返回List 里面封装了异常信息List大小为0的时候数据没有异常
	 *
	 * */
	public List<String> checkData(List<List> list) throws Exception;
		
	
	/** 返回一个list里面封装了checkData方法验证的所有错误信息共前台显示
	 * @param 
	 * @return 返回一个list里面封装了checkData方法验证的所有错误信息共前台显示
	 * */
	public List<String> checkDataError();
	
	/** 将从excel封装的list里面的数据转换成sql语句
	 * @param 
	 * @return
	 * */
	public List<String> getSqlList(List<List> list)throws Exception;
	
	/** 是否删除原有的数据
	 * @param true表示删除 false为不删除
	 * @return
	 * */
	public void optionDelOldDate(boolean bool);
	
	/** 删除原有数据
	 * @param 
	 * @return 返回删除的记录数
	 * */
	
	public int delOldDate()throws Exception;
	
	
	/** 通过传入的sql语句执行数据库操作
	 * @param list
	 * 		getSqlList方法得到的sql语句
	 * 		  
	 * @return 执行的记录数
	 * */
	public int optionDate(List<String> list)throws Exception;
		
	
	/** 导入的excel流程控制类
	 * @param fileContentType
	 * 		 导入的文件类型
	 * @param filepath文件的路径	
	 * @param object扩展数据		  
	 * @return 操作结果标志位 
	 * 			-1为非法文件
	 * 			-2 数据验证不通过
	 *           1 为操作完成
	 * */
	public int importExcelToDb(String fileContentType,String filepath,Object object)throws Exception;
	
	/**
	 * 
	 * @return 返回操作的数据记录数
	 */
	public int getOptionDataNum();
	
	/**
	 * @param bool
	 * 		  设置验证后非法数据的操作true为继续导入数据，作false为不导入数据流程结束
	 * @return 返回操作的数据记录数
	 */
	public void setDataErrorOption(boolean bool);
	
	public List getErrorDataList();
	
	public String getCellsValue(HSSFCell cell) throws Exception;
	 
}
